#include "ScnsSt7735.c.h"

#if defined(SCNS_ST7735_ENABLE)&&SCNS_ST7735_ENABLE==1

#include "ScnsSmctp.h"
#include "ScnsTimer.h"

const ScnsBspSt7735Config scnsBspSt7735Config[SCNS_ST7735_MAX]={
    {
        .dir=0,
        .horizon=128,
        .vertical=160,
        .horizonBias=2,
        .verticalBias=1,
        .bgr=0,
        .reverseColor=0,
    },
};

#define PTX_SPI     SPI_3
#define PTX_SCL     SPI3_SCK_B0
#define PTX_MOSI    SPI3_MOSI_B1
#define PTX_MISO    SPI3_MISO_B2
#define PTX_RST     B2
#define PTX_DC      C19
//#define PTX_CS      SPI3_CS0_B3
#define PTX_CS      B3
#define PTX_BL      C18

ScnsStatus scnsBspSt7735Init(ScnsSt7735Enum stn)
{
    spi_init(PTX_SPI,PTX_SCL,PTX_MOSI,PTX_MISO,SPI_CS_NOT_USE,0,30*1000*1000);
    gpio_init(PTX_CS,GPO,GPIO_HIGH,GPIO_PIN_CONFIG);
    gpio_init(PTX_DC,GPO,GPIO_LOW,GPIO_PIN_CONFIG);
    gpio_init(PTX_RST,GPO,GPIO_LOW,GPIO_PIN_CONFIG);
    gpio_init(PTX_BL,GPO,GPIO_HIGH,GPIO_PIN_CONFIG);
    return SCNS_STATUS_OK;
}

ScnsStatus scnsBspSt7735SetRst(ScnsSt7735Enum stn,uint8 dat)
{
    gpio_set(PTX_RST,dat);
    return SCNS_STATUS_OK;
}

ScnsStatus scnsBspSt7735SetCs(ScnsSt7735Enum stN,uint8 cs)
{
    gpio_set(PTX_CS,cs);
    return SCNS_STATUS_OK;
}

ScnsStatus scnsBspSt7735WReg(ScnsSt7735Enum stn,uint8 dat)
{
    gpio_set(PTX_DC,0);
    spi_mosi(PTX_SPI,SPI_CS_NOT_USE,&dat,&dat,1,1);
    return SCNS_STATUS_OK;
}

ScnsStatus scnsBspSt7735WData(ScnsSt7735Enum stn,uint8 dat)
{
    gpio_set(PTX_DC,1);
    spi_mosi(PTX_SPI,SPI_CS_NOT_USE,&dat,&dat,1,1);
    return SCNS_STATUS_OK;
}

ScnsStatus scnsBspSt7735WData16S(ScnsSt7735Enum stn,uint16 dat[],uint32 len)
{
    gpio_set(PTX_DC,1);
    spi_mosi(PTX_SPI,SPI_CS_NOT_USE,(uint8*)dat,NULL,2*len,1);
    return SCNS_STATUS_OK;
}

ScnsStatus scnsBspSt7735SetBackgroundLight(ScnsSt7735Enum stn,ScnsLcdBackgroundLightStatus status)
{
    gpio_set(PTX_BL,status==SCNS_LCD_BACKGROUND_LIGHT_ON?1:0);
    return SCNS_STATUS_OK;
}

#endif
